package com.shujia.wyh.day18;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/*
    遍历Collection集合的第二种方式：迭代器遍历

 */
public class CollectionDemo5 {
    public static void main(String[] args) {
        //创建集合对象
        Collection c1 = new ArrayList();
        //向集合中添加元素
        c1.add("hello");
        c1.add("world");
        c1.add("java");
        c1.add("hadoop");
        c1.add("hive");
        System.out.println("c1:" + c1);
        System.out.println("===============================");
        //获取c1迭代器对象
        //Iterator iterator()返回此集合中的元素的迭代器。
        Iterator iterator = c1.iterator();
//        System.out.println(iterator); //java.util.ArrayList$Itr@4554617c
        //E next()返回迭代中的下一个元素。
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next()); //NoSuchElementException
//        System.out.println(iterator.next());
        //我们通过观察发现，后面两个System.out.println(iterator.next());是多余的
        //是不应该写的，因为再调用之前，迭代器中的元素就已经遍历完了，
        //我直接获取元素这样的方式不太妥当的
        //我们应该在获取元素之前，进行一次判断，判断要获取的位置上有没有元素，如果没有，不搭理他，如果有就调用next()方法
        //问题：如何进行迭代器元素的判断呢？
        //boolean hasNext()如果迭代具有更多的元素，则返回true 。
        // （换句话说，如果next()返回一个元素而不是抛出一个异常，则返回true ）
//        if(iterator.hasNext()){
//            System.out.println(iterator.next());
//        }
//
//        if(iterator.hasNext()){
//            System.out.println(iterator.next());
//        }
//
//        if(iterator.hasNext()){
//            System.out.println(iterator.next());
//        }
//
//        if(iterator.hasNext()){
//            System.out.println(iterator.next());
//        }
//
//        if(iterator.hasNext()){
//            System.out.println(iterator.next());
//        }
//
//        if(iterator.hasNext()){
//            System.out.println(iterator.next());
//        }
//
//        if(iterator.hasNext()){
//            System.out.println(iterator.next());
//        }
//
//        if(iterator.hasNext()){
//            System.out.println(iterator.next());
//        }
//
//        if(iterator.hasNext()){
//            System.out.println(iterator.next());
//        }
        //我加入判断后发现，虽然可以将迭代器中的元素打印出来，并且代码也不报错，但是，我们其实并不知道迭代器中有多少元素
        //我们只是凭着感觉进行打印
        //实际上迭代器中有多少个元素，我们就应该做多少次判断取值，次数应该是正好的。
        //怎么去改进呢？用循环改进
        //由于我们并不知道迭代器中有多少元素，所以用while循环

        while (iterator.hasNext()) {
            Object next = iterator.next();

            //向下转型
            String s = (String) next;
            System.out.println(s + "字符串的长度为：" + s.length());
        }


    }
}
